package com.tedu.mapper;

import com.tedu.entity.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface UserMapper {
    // 查询一条数据
//    @Select("select * from t_user where id=${abc} ")
    /*
    使用${} 特点：将参数做为SQL的一部分进行了编译！会存在一定风险：SQL注入【对比Statement】，也就是可能会改变SQL的结构
        DEBUG [com.tedu.mapper.UserMapper.findUserById] - ==>  Preparing: select * from t_user where id=3
        DEBUG [com.tedu.mapper.UserMapper.findUserById] - ==> Parameters:
        DEBUG [com.tedu.mapper.UserMapper.findUserById] - <==      Total: 1
    使用#{} 特点：是先将已有的sql进行预编译【固定SQL结构】，那么传入的值都是需要的参数，并不会改变已有SQL结构
        DEBUG [com.tedu.mapper.UserMapper.findUserById] - ==>  Preparing: select * from t_user where id=?
        DEBUG [com.tedu.mapper.UserMapper.findUserById] - ==> Parameters: 3(Integer)
        DEBUG [com.tedu.mapper.UserMapper.findUserById] - <==      Total: 1
     */
    @Select("select * from t_user where id=${abc} ")
    User findUserById(Integer id);

//    @Select("select * from t_user ")
    @Select("select * from ${t_user} ")
    List<User> findUsers(String tableName);

//    @Insert("insert into t_user values(null,#{arg0},#{arg1},#{arg2},#{arg3},#{arg4},#{arg5})")
//    @Insert("insert into t_user values(null,#{param1},#{param2},#{param3},#{param4},#{param5},#{param6})")
//@Insert("insert into t_user values(null,#{name},#{pwd},#{age},#{phone},#{email},#{department_id})")
//    int insertUser(
//            @Param("name") String username, // java中进行预编译是将参数对应的值存储起来了，对应的是地址信息，名称是没有任何意义的！
//            @Param("pwd") String password,
//            @Param("age") Integer age,
//            @Param("phone")String phone,
//            @Param("email")String email,
//            @Param("department_id")Integer department_id
//    );
@Insert("insert into t_user values(null,#{username},#{password},#{age},#{phone},#{email},#{deparatment_id})")
    int insertUser(User user);  // 什么时候可以封装对象传参？  当两个或者以上！

    @Delete("delete from t_user where id=#{id}")
    int deleteUserById(Integer id);

    @Update("update t_user set age=66 where id =#{id}")
    int updateUserById(Integer id);
}
